// 定义分数、等级，吃食物加分、提升等级
class ScorePanel {
  // score和level用来记录分数和等级
  score = 0
  level = 1

  // 分数和等级所在的元素，在构造函数中进行初始化 
  scoreElement: HTMLElement
  levelElement: HTMLElement

  // 设置等级上限
  maxLevel: number = 13
  // 设置一个变量表示多少分时升级
  upScore: number = 10;
  // 难度值hard
  // hard: number = 10

  // 设置升级规则：
  // 每升1级，需要(10*等级)分：例（升到一级需要加10份，从5级升到6级，需要60分）
  constructor(maxLevel: number = 13, upScore: number = 10) {
    this.scoreElement = document.getElementById('score')!
    this.levelElement = document.getElementById('level')!
  }

  //吃食物时，加分的方法
  addScore() {
    this.score++
    this.scoreElement.innerHTML = this.score + ''
    // + '' 的作用是转为字符串
    console.log(this.score);

    // 下次升级所需要的总分数NeedScore
    let NeedScore = 0
    // 正式的升级策略
    for (let i = this.level; i > 0; i--) {
      // 每升1级，需要(10*等级)分：例（升到一级需要加10分，从5级升到6级，需要60分）
      NeedScore += i * 10
    }

    // 测试的升级策略，每2分升级一次
    // if (this.score % 2 === 0) {
    //   this.addLevel()
    // }

    if (this.score === NeedScore) {
      // 当前分数和升级所需分数一样时，升级！！
      this.addLevel()
    }

    // 测试的升级策略，每3秒升级一次
    // this.addLevel()

  }

  // 等级提升，当分数达标，调用升级函数
  addLevel() {
    // 正式的升级策略
    // 当前等级不高于最大等级时，可以升级
    if (this.level < this.maxLevel) {
      this.level++
      this.levelElement.innerHTML = this.level + ''
      console.log('level up');
    }

    // 测试的升级策略
    // this.level++
    // this.levelElement.innerHTML = this.level + ''
    // console.log('level up');
  }
}

// 测试吃食物：加分，提升等级
// const scorePanel = new ScorePanel()
// for (let i = 0; i < 29 * 29; i++) {
//     // 吃i次食物
//     scorePanel.addScore()
// }

export default ScorePanel
